/*
 * @Author: fisher
 * @Date: 2024-02-06 15:57:24
 * @LastEditors: fisher luthor-li@qq.com
 * @LastEditTime: 2024-02-06 19:08:21
 * @FilePath: \allback\middlewares\errorHandler.js
 * @Description:
 */
// middlewares/errorHandler.js
const logger = require('../utils/logger') // 确保路径匹配您的项目结构
module.exports = async (ctx, next) => {
  try {
    // 执行下一中间件
    await next()
  } catch (error) {
    // 发生错误时记录错误信息以及请求的详细信息
    const errorMsg = `Error in ${ctx.method} ${ctx.originalUrl}: ${error.message}; ${error.stack} \n`
    // 记录错误并附加请求信息作为元数据
    logger.error(errorMsg, {
      requestBody: ctx.request.body, // 请求体内容
      query: ctx.query, // 查询参数
      params: ctx.params, // 路由参数
      ip: ctx.ip // 请求IP地址
      // 更多想记录的信息可以添加在这里
    })
    // 错误响应状态码设置，如 500
    ctx.status = error.status || 500
    // 错误信息响应给客户端
    ctx.body = {
      message: error.message || 'Internal Server Error',
      status: false
    }
    // // 可以在这里添加更多错误处理逻辑，比如记录日志等
    ctx.app.emit('error', error, ctx) // 也可以触发应用级错误事件，决定于需要
  }
}
